<?php
/*
SAE的PHP Runtime环境提供了标准的MySQL,MySQLI和PDO模块
ACE使用的是标准mysql数据库
BAE云环境使用标准的php mysql或php mysqli扩展访问云数据库
因此可知，只要按提供返回mysql的$db_link或mysqli的接口即可。




http://sae.sina.com.cn/?m=devcenter&catId=192
文档中心 » 平台介绍 » 服务列表 » MySQL
服务概要
使用指南
数据管理
　　 数据导入、导出
　　 数据备份
服务限制与配额
　　 MySQL保护
　　 MySQL慢查询配额
　　 MySQL对用户开放的...
　　 分钟配额
　　 容量配额
MySQL常见问题
什么是RDC?
MySQL跨应用调用
　　 什么是MySQL跨应用...
　　 MySQL跨应用调用示...
收起
服务概要
    SAE平台为每个App支持几乎所有MySQL的特性。目前支持MyISAM引擎，暂不支持InnoDB。需要注意的是SAE的数据库需要显式开启或者禁用。您还可以通过phpmyadmin来创建数据库和数据表。SAE的PHP环境提供了标准的MYSQL,MYSQLI和PDO模块(基于MySQLnd)，您可以直接使用这三个模块来操作您的数据库， 您可以使用预定义常量来连接数据库，我们不排除未来可能调整数据库端口，使用预定义常量能够避免这样的问题。当然SAE也提供了SaeMysql类，我们也推荐您使用这个类来操作MySQL资源。
使用指南
    SAE上的MySQL服务和普通MySQL服务几乎一样，所以如果你已经熟悉了MySQL的常规使用的话，会感到很简单。对于mysql/mysqli模块的用法，您可以参考PHP官方手册。
   SAE也提供了基于MySQL模块的SaeMysql类
Sae Mysql Class
示例:
<?php
$mysql = new SaeMysql();
$sql = "SELECT * FROM `user` LIMIT 10";
$data = $mysql->getData( $sql );
$name = strip_tags( $_REQUEST['name'] );
$age = intval( $_REQUEST['age'] );
$sql = "INSERT  INTO `user` ( `name` , `age` , `regtime` ) VALUES ( '"  . $mysql->escape( $name ) . "' , '" . intval( $age ) . "' , NOW() ) ";
$mysql->runSql( $sql );
if( $mysql->errno() != 0 )
{
   die( "Error:" . $mysql->errmsg() );
}
$mysql->closeDb();
?>
    SAE的PHP Runtime环境提供了标准的MySQL,MySQLI和PDO模块,三个模块都由MYSQLND驱动,支持所有MYSQL的特性,您可以使用您习惯的方式来操作数据库.
   如果您没有使用SaeMysql类操作数据库，可以使用以下预定义常量进行连接：
                             用户名　 :  SAE_MYSQL_USER
                             密　　码 :  SAE_MYSQL_PASS
                             主库域名 :  SAE_MYSQL_HOST_M
                             从库域名 :  SAE_MYSQL_HOST_S
                             端　　口 :  SAE_MYSQL_PORT
                             数据库名 :  SAE_MYSQL_DB
    使用方法，以mysql模块为例:
   //连主库
       $link=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
   //连从库
       //$link=mysql_connect(SAE_MYSQL_HOST_S.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
       if($link)
           {
               mysql_select_db(SAE_MYSQL_DB,$link);
               //your code goes here
           }
  
数据管理
   SAE上的数据属于用户，所以我们允许用户自由导入导出数据。
数据导入、导出
   SAE支持两种方式数据导入、导出：
   A. 对于4M以内的小数据，用户可以通过PhpAdmin在线同步的导入、导出
   B. 对于4M以上的数据，我们不推荐用户使用PhpAdmin同步的执行（实际因为php等限制用户也无法执行该操作），而是强烈建议使用DefferedJob来完成MySQL数据的导入、导出。其中，导出是用户通过DefferedJob将MySQL中的数据生成sql源文件并存放在用户的Storage存储中；而导入，用户需要使用大文件上传的客户端（如SDK），将用户的sql文件上传至Storage存储中，然后通过在线管理平台，将该sql导入到MySQL中。
    具体参考：DeferredJob
数据备份
   SAE提供MySQL服务的高可靠性，根据SLA需求不同，一个一主一从到一主N从的数据库HA，用户如果出于可靠性的考虑，SAE不推荐用户自行做数据备份。当然用户也可以使用数据导出功能自行备份。
服务限制与配额
   SAE设置服务限制和配额的目的是为了防止个别用户攻击和滥用，从而在公有云计算平台上保证绝大多数开发者的正常使用。
   1. 服务限制和配额设定是在门户网站新浪自身长期运维的基础上经过严格计算得出的，所以正常使用一般不会出现问题。经过SAE实际统计，99%的应用不会受到任何影响
   2. 当您发现您的某项服务超过限制或者超配时，请先阅读相关文档确认限制和配额的具体数值，再检查自己的程序是否存在使用不当的情况，如果仍然解决不了，可以和SAE官方联系，saeadmin@sina.cn
MySQL保护
   SAE通过RDC对MySQL进行保护，保护的基本原则是通过预判机制屏蔽对MySQL的不正确使用和恶意滥用，保证用户数据库之间的隔离性。具体保护规则，请参考，http://sae.sina.com.cn/?m=devcenter&catId=38#anchor_d337b458051e63f545eaceaee3cea379
MySQL慢查询配额
SQL执行时间超过1秒，即为慢查询，其分钟配额为
条目数	10
累计执行时间	30秒
扫描行	1,000,000
注意，触发慢查询分钟配额禁用，MySQL服务将禁用5分钟
MySQL对用户开放的操作
   select, insert, update, delete
   create table
   alter table
   drop table
   index
分钟配额
   运行在SAE上的应用(App)将会消耗平台资源，为保证各App不互相影响，我们引入了*分钟配额*的概念，即：在每分钟内每个应用的各个服务所消耗 的 资源的速度。比如，当平台中的某个应用的MySQL服务一分钟内累计请求数达到20万，或者流出宽带超过600M，我们将会立即禁掉该应用的MySQL 服务，禁用五分钟后，恢复会自动恢复，避免影响到SAE平台的稳定性。服务因为超过“分钟配额”而被禁用时，会在“服务状态”看到该服务被禁用的原因是：OverMinuteQuota
服务	请求数	cpu时间	流入带宽	流出带宽
MySQL	200,000	400s=>600s	300MB=>600M	600MB=>1200M
容量配额
   容量配额是针对MySQL\Storage\MemCache设置的，是指用户能够使用的磁盘或内存的最大限制(见下表)，其中Memcache的最大容量配额是用户自己在初始化Memcache时设置的，可设置的范围是1M~256M。
服务	配额
MySQL	5G
Storage	10G*
注意，每个App允许建立5个Storage domain，每个domain为2G

MySQL常见问题
   常见MySQL的FAQ
什么是RDC?
   RDC是Relational DB Cluster(关系型数据库集群)的简称，是一种分布式的关系型数据库集群，主要用在支撑公有云计算平台的数据库集群,可以支持百万级的数据库后端。
   RDC 对终端用户完全透明，用户在使用RDC时，不会感觉到和使用传统的MySQL数据库有任何差异.用户可以使用所有MySQL标准客户端(MySQL5以 上)操作RDC，如mysql_query、mysql_connect等，错误处理也和标准MySQL客户端处理模式一样。
   RDC为用户提供了更加稳定可靠的服务:
   1.通过其强隔绝性为用户提供了更高的安全性,保障用户的数据安全。
   2.当后端DB发生故障和延迟时,RDC能够自动切换,保证服务更加稳定可靠。
   3.能通过对SQL的智能预处理降低用户触发分钟配额的可能。
   4.由于RDC自身性能消耗更低,整体数据库集群性能也有所提升。
      
    查看RDC详细介绍

MySQL跨应用调用
什么是MySQL跨应用调用
MySQL跨应用调用是指通过授权的方式，使得一个应用拥有访问并操作另一个应用MySQL数据库的权限，从而达到应用间数据共享和单应用多数据库管理等的目的。
MySQL跨应用调用示例
1. 未初始化MySQL的testmysql1应用进行初始化
2. 初始化完成后，进行跨应用授权，授权到testmysql2应用：
可选择本帐号应用或其他帐号应用，此处授权到testmysql2应用
3. 编写脚本，显示本应用testmysql1的MySQL信息，供授权应用testmysql2使用
相关代码：
<?php
header("Content-type:text/html;charset=utf-8");
echo "用户名   :".SAE_MYSQL_USER;?><br></br><?
echo "密码     :".SAE_MYSQL_PASS;?><br></br><?
echo "主库域名:".SAE_MYSQL_HOST_M;?><br></br><?
echo "从库域名:".SAE_MYSQL_HOST_S;?><br></br><?
echo "端口     :".SAE_MYSQL_PORT;?><br></br><?
echo "数据库名:".SAE_MYSQL_DB;?><br></br><?
?>
4. 调用脚本，可以打印出testmysql1应用MySQL信息
5. 测试跨应用调用是否可用
（1）测试脚本，测试testmysql2应用是否可以读取并写入testmysql1的数据库
（2）运行脚本
（3）运行脚本前，testmysql1应用数据库内容
（4）运行脚本后，testmysql1应用数据库内容



http://dev.baidu.com/wiki/bae/index.php?title=SQL
SQL
目录[隐藏]
1 服务简介
1.1 使用示例
1.1.1 php mysql
1.1.2 php mysqli
2 函数说明
2.1 禁用函数
服务简介
        云环境php应用可使用标准的php mysql或php mysqli扩展访问云数据库，云环境的PHP中已提供这两个扩展，应用可直接使用。目前扩展所用的mysql client api版本为5.1.30。
        SQL的使用方法请参考百度云数据库中的说明文档http://dev.baidu.com/wiki/yun/index.php?title=关系服务
使用示例
php mysql
<?php>
//从平台获取查询要连接的数据库名称
$dbname = 'WBxduSiUccUSWSwuySym';
//从环境变量里取出数据库连接需要的参数
$host = getenv('HTTP_BAE_ENV_ADDR_SQL_IP');
$port = getenv('HTTP_BAE_ENV_ADDR_SQL_PORT');
$user = getenv('HTTP_BAE_ENV_AK');
$pwd = getenv('HTTP_BAE_ENV_SK');
//接着调用mysql_connect()连接服务器
$link = @mysql_connect("{$host}:{$port}",$user,$pwd,true);
if(!$link) {
    die("Connect Server Failed: " . mysql_error($link));
}
//连接成功后立即调用mysql_select_db()选中需要连接的数据库
if(!mysql_select_db($dbname,$link)) {
    die("Select Database Failed: " . mysql_error($link));
}
//至此连接已完全建立，就可对当前数据库进行相应的操作了
//！！！注意，无法再通过本次连接调用mysql_select_db来切换到其它数据库了！！！
//需要再连接其它数据库，请再使用mysql_connect+mysql_select_db启动另一个连接
//接下来就可以使用其它标准php mysql函数操作进行数据库操作
//显示关闭连接，非必须
mysql_close($link);
?>
php mysqli
<?php>
//从平台获取查询要连接的数据库名称
$dbname = 'WBxduSiUccUSWSwuySym';
//从环境变量里取出数据库连接需要的参数
$host = getenv('HTTP_BAE_ENV_ADDR_SQL_IP');
$port = getenv('HTTP_BAE_ENV_ADDR_SQL_PORT');
$user = getenv('HTTP_BAE_ENV_AK');
$pwd = getenv('HTTP_BAE_ENV_SK');
//创建mysqli对象，直接在创建时指定连接信息，也可创建对象后再connect
$link = @new mysqli($host, $user, $pwd, $dbname, $port);
if($link->connect_errno) {
    die("Connect Server Failed: " . $link->connect_error);
}
//已在建立连接时指定dbname，无须再select_db
//接下来就可以使用其它标准php mysql函数操作进行数据库操作
//显示关闭连接，非必须
$link->close();
?>
函数说明

        mysql函数说明请参数http://cn.php.net/manual/en/book.mysql.php
        mysqli请参考http://cn.php.net/manual/en/book.mysqli.php
禁用函数

mysql_drop_db
mysql_create_db
mysql_pconnect
mysql_db_query
mysql_list_dbs
mysql_list_fields
mysql_list_tables




http://ace.aliyun.com/index/help/
…………
功能介绍
开发：
1.  Session，分布式session，开发者无需考虑跨多台机器的session处理
2.  Storage，基于开放式存储服务，支持多台机器的同时访问
3.  memcache，分布式缓存，有效解决memcache的多机共享，和实例重启引发的缓存清空
4.  cron，通过函数调用方式，支持定时和定期执行任务
5.  应用管理和配置，支持应用的创建、启动、停止、更新、查看等操作
6.  mysql数据库支持，双机热备，支持在线迁移和备份，单表可支持上亿记录
…………





*/
?>